#include <Arduino.h>
#include <PubSubClient.h>
#include <ESP8266WiFi.h>

WiFiClient espClient;               // 创建一个wifi客户端对象
PubSubClient mqttClient(espClient); // 创建一个mqtt客户端对象

float temp=25.5;
// 回调函数
void callback(char *topic, byte *payload, unsigned int length)
{
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++)
  {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void setup()
{
  Serial.begin(115200);            // 初始化串口
  WiFi.begin("k60", "yan778899");  // 连接热点

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  Serial.println(WiFi.localIP());


  mqttClient.setServer("bemfa.com", 9501); // 设置mqtt服务器和端口
  mqttClient.setCallback(callback);        // 设置回调函数

  bool ok = mqttClient.connect("8835ed7aa49f74edd889f1248bd5ca8c", "mqtt_user", "mqtt_pass"); // 连接mqtt服务器
  if (!ok)
  {
    Serial.println("mqtt connect failed"); // 连接失败
    return;
  }

  ok = mqttClient.subscribe("app2dev"); 
  //对于设备端而言 订阅的主题 (关于应用端到设备)

  if (!ok){
    Serial.println("mqtt subscribe failed"); // 订阅失败
    return;
  }
  Serial.println("mqtt subscribe success"); // 订阅成功

}


void loop()
{

  mqttClient.loop();
  Serial.println("loop\n");

  char buf[32];
  sprintf(buf, "temp:%.2f", temp);

   //对于设备端而言 发布的主题 (关于设备到应用端)
  mqttClient.publish("dev2app", buf); // 发布消息 上传温度数据

  delay(1000);
}
